﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Loja.Padrao;
using Loja.Aplicação;
using Loja.Controles.Aplicação;
using Loja.Banco;

namespace Loja.Telas
{
    public partial class FormCadastro : PadraoCadastro
    {
        private Controle controle;

        private Cadastro cadastro;

        private DateTime? dataNacto;

        public FormCadastro(Controle controle, Object cadastroParametro)
        {
            this.controle = controle;
            cadastro = (Cadastro)cadastroParametro;
            InitializeComponent();
            if (this.cadastro.Cadastro_ID != 0)
                PopulaTela(this.cadastro);
            else            
                ListaTipoCadastro(false);            
        }

        public void ListaTipoCadastro(Boolean todos)
        {
            if (todos)//Lista todos os tipos cadastros
            {
                cbTipoCadastro.DataSource = controle.BuscaTipoCadastro();
            }
            else//Lista apenas os tipos cadastros ATIVOS
                cbTipoCadastro.DataSource = controle.BuscaTipoCadastroAtivos();
        }

        public void PopulaTela(Cadastro cadastro)
        {
            //var cliente = controle.AbrirCadastro(cadastro);
            txtCodigo.Text = cadastro.Cadastro_ID.ToString();
            dtCadastro.Value = cadastro.DataCadastro;
            dtCadastro.Enabled = false;
            if (cadastro.DataNascto != null)
                dtNascto.Value = cadastro.DataNascto.Value;
            txtNome.Text = cadastro.Nome;
            txtEnder.Text = cadastro.Endereco;
            txtNumero.Text = cadastro.Numero;
            //tbObs.Text = cliente.Observacao != null ? cliente.Observacao : string.Empty;
            tbObs.Text = cadastro.Observacao;
            txtCidade.Text = cadastro.Cidade;
            ListaTipoCadastro(true);
            cbTipoCadastro.SelectedItem = cadastro.TipoCadastro;
            if (cbTipoCadastro.SelectedItem.ToString() == "FORNECEDOR")
            {
                dtNascto.Enabled = false;
            }
            try
            {     
                txtFone.Text = String.Format(@"{0:\(00)\0000\-0000}",       Valida(cadastro.Telefone));
                txtCel.Text = String.Format(@"{0:\(00)\0000\-0000}",        Valida(cadastro.Celular));
                txtCep.Text = String.Format(@"{0:00\.000\-000}",            Valida(cadastro.CEP));
                txtCNPJ.Text = String.Format(@"{0:00\.000\.000\.0000\-00}", Valida(cadastro.CNPJ));
                txtCPF.Text = String.Format(@"{0:000\.000\.000\-00}",       Valida(cadastro.CPF));
                txtIe.Text = String.Format(@"{0:00\.000\.000\-00}",         Valida(cadastro.InscricaoEstadual));
                txtRg.Text = String.Format(@"{0:00\.000\.000\-0}",          Valida(cadastro.RG));                             
            }
            catch (Exception x)
            {
                MessageBox.Show("Erro ao converter Campos formatados!");
            }
        }

        public static Object Valida(String valorParametro)
        {
            if (String.IsNullOrEmpty(valorParametro))
                return valorParametro;
            else                
                return long.Parse(valorParametro);
        }

        new private void btnSair_Click(object sender, EventArgs e)
        {

        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidaCampos())
                {
                    if (this.cadastro.Cadastro_ID != 0)//alterar
                    {

                        ValidaDataNascto();

                        if (controle.AtualizarCadastro(cadastro,
                                                     txtCel.Text,
                                                     txtCep.Text,
                                                     txtCNPJ.Text,
                                                     txtCPF.Text,
                                                     txtEnder.Text,
                                                     txtFone.Text,
                                                     txtIe.Text,
                                                     txtNome.Text,
                                                     txtNumero.Text,
                                                     txtRg.Text,
                                                     tbObs.Text,
                                                     dataNacto,
                                                     txtCidade.Text,
                                                     cbTipoCadastro
                                                    ))//arrumar
                        {
                            MessageBox.Show("Registro atualizado com sucesso!");
                            this.Close();
                        }
                        else
                            MessageBox.Show("Erro ao atualizar!");
                    }
                    else//salvar
                    {
                        ValidaDataNascto();

                        if (controle.InserirCadastro(txtCel.Text,
                                                     txtCep.Text,
                                                     txtCNPJ.Text,
                                                     txtCPF.Text,
                                                     txtEnder.Text,
                                                     txtFone.Text,
                                                     txtIe.Text,
                                                     txtNome.Text,
                                                     txtNumero.Text,
                                                     txtRg.Text,
                                                     tbObs.Text,
                                                     dtCadastro.Value,
                                                     dataNacto,
                                                     txtCidade.Text,
                                                     cbTipoCadastro
                                                    ))
                        {
                            MessageBox.Show("Registro inserido com sucesso!");
                            this.Close();
                        }

                        else
                            MessageBox.Show("Erro ao incluir Novo Cadastro!");
                    }
                }
                else
                {
                    MessageBox.Show("É obrigatório informar nome para salvar o cadastro!");
                }
            }
            catch(Exception ex)
            {

            }
        }

        public Boolean ValidaCampos()
        {
            if (txtNome.Text !="")
                return true;
            else 
                return false;
        }

        public void ValidaDataNascto()
        {
            if (cbTipoCadastro.SelectedItem.ToString() == "FORNECEDOR")
            {             
                dataNacto = null;
            }
            else
            {
                dataNacto = new DateTime(dtNascto.Value.Year, dtNascto.Value.Month, dtNascto.Value.Day);
            }
        }

        private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtCel_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtCNPJ_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtCPF_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtIe_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtRg_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void txtFone_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private void cbTipoCadastro_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cbTipoCadastro.SelectedItem.ToString() == "FORNECEDOR")
            {
                dtNascto.Enabled = false;                
            }
            else
            {
                dtNascto.Enabled = true;                
            }
        }
    }
}
